package org.atovio.http.service;

import org.atovio.http.model.Todo;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.service.annotation.GetExchange;
import org.springframework.web.service.annotation.PostExchange;
import org.springframework.web.service.annotation.PutExchange;

/**
 * @author AtoVio, Winter Yuan
 */
public interface TodoService {

    /*
    方法参数可以是：
        1. URI
        2. HttpMethod
        3. 使用@RequestHeader     添加到请求中header，参数可以是Map<String,?>,单个值或Collection<?>
        4. 使用@PathVariable      URL中的占位符，参数可以是单个值或Map<String,?>
        5. 使用@RequestBody       请求体，参数是对象。
        6. 使用@RequestParam      请求参数，
        7. 使用@RequestPart       发文件时使用
     */

    // 一个方法就是一个远程服务
    @GetExchange("/todos/{id}")
    Todo getTodoById(@PathVariable("id") Integer id);

    // 添加
    @PostExchange(value = "/todos", accept = MediaType.APPLICATION_JSON_VALUE)
    Todo createTodo(@RequestBody Todo todo);

    // 修改
    @PutExchange("/todos/{id}")
    ResponseEntity<Todo> modifyTodo(@PathVariable("id") Integer id, @RequestBody Todo todo);
}
